/**
 * @file main.cpp
 * @brief 情感分析系统的主入口文件
 * @author Zeal Cmixed
 *
 * 该文件包含程序的 main 函数，负责协调整个情感分析流程：
 * 1. 加载评判标准文件
 * 2. 加载用户输入文件
 * 3. 执行情感分析
 * 4. 输出分析结果
 */

#include "pch.hpp"
#include "sentiment_analysis.cpp"

/**
 * @brief 程序的主入口函数
 *
 * @return int 程序退出状态码，0 表示成功，非 0 表示错误
 *
 * 该函数依次执行以下步骤：
 * 1. 初始化情感判断准则(EmoJC)和情感分析(SentiAnal)对象
 * 2. 加载评判标准文件(evaluationCriteria.json)
 * 3. 加载用户输入文件(userSituation.json)
 * 4. 执行情感分析
 * 5. 输出分析结果到终端和文件
 */
int main() {
    sal::EmoJC emoJC;          ///< 情感判断准则对象
    sal::SentiAnal sentiAnal;  ///< 情感分析对象

    const std::string evaluationCriteria = "evaluationCriteria.json";  ///< 评判标准文件路径
    const std::string userSituation = "userSituation.json";     ///< 用户输入文件路径

    // 加载评判标准
    auto result = emoJC.fileInput(evaluationCriteria);
    if (!result.has_value()) {
        std::println(std::cerr, "载入评判标准失败：{}", result.error().message());
        return 1;
    }

    // 加载用户输入
    result = sentiAnal.fileInput(userSituation);
    if (!result.has_value()) {
        std::println(std::cerr,  "载入用户输入失败：{}", result.error().message());
        return 1;
    }

    // 传递已加载的emoJC对象进行分析
    result = sentiAnal.analysis(emoJC);  // 传递对象
    if (!result.has_value()) {
        std::println(std::cerr, "分析失败：{}", result.error().message());
        return 1;
    }

    // 输出分析结果
    result = sentiAnal.messageOutput();
    if (!result.has_value()) {
        std::println(std::cerr, "消息输出失败：{}", result.error().message());
        return 1;
    }

    std::println("所有操作成功完成");
    std::cin.get();

    return 0;
}
